今天要來講如何在取得的元素上修改樣式。
HTML的element有幾種可以用的property,其中有一個為style
property,對選取的element使用style,會回傳一組動態的CSSStyleDeclaration
物件的列表,列表只修改element的inline style
(就是在element裡面新增一個style屬性,使用style來修改樣式的方法),假設原本的inline style
的任一樣式已經被修改,那麽Javascript中使用element.style
修改同樣的樣式,就會覆蓋原樣式。
如果想要清空樣式,可以在指定的內容中寫null
。
比方說樣式中有width:400px
,將其修改成1000px
。
<p style='width:400px; margin: 0 auto; padding: 20px; background:LightSeaGreen; text-align: center; color: white;font: 30px sans-serif;'>HOT POT</p>
const p = document.querySelector("p");
p.style.width = '1000px';
//清空樣式
p.style.width = null;
在CSS名稱轉換成Javascript時,需要注意:
element.style
時也要把單位加上去。float
是Javascript保留字,可以寫成cssFloat
。text-align
改成textAlign
)。classList
是透過class的名稱來修改CSS的方法,對元素使用classList屬性,會回傳一組動態的DOMTokenList
,並提供一些方法。
以平常寫樣式時都是從外部引入樣式表的方法,有需要時我會修改class名稱跟樣式表的選擇器內容,再使用classList
。
對元素新增一個class,可以用逗號隔開多個class名稱一次引入。
<p>HOT POT</p>
.text {
width:400px;
margin: 0 auto;
padding: 20px;
background:LightSeaGreen;
text-align: center;
color: white;
font: 30px sans-serif;
}
const p = document.querySelector("p");
p.classList.add('text');
使用這個方法可以一次移除一個或多個class name。
p.classList.remove('text');
使用這個方法可以取代特定的class名稱,寫法是replace(oldName, newName)
。
首先我先把更改背景顏色的樣式獨立出來,並取名為backgroundColor1(取名請見諒。),希望背景顏色從LightSeaGreen
更改成Gold
。
<p class = 'text backgroundColor1'>HOT POT</p>
.text {
width:400px;
margin: 0 auto;
padding: 20px;
text-align: center;
color: white;
font: 30px sans-serif;
}
.backgroundColor1{
background:LightSeaGreen;
}
.backgroundColor2{
background:Gold;
}
const p = document.querySelector("p");
p.classList.replace('backgroundColor1','backgroundColor2');
toggle()
的原理是在DOMTokenList
移除原有的class某個名稱,並回傳一個false
,如果這個class名稱不存在,就會被新增並回傳true
,達到切換的效果。
語法為toggle(name, force)
,第一個參數是放想控制的class名稱,第二個則是提供true
或false
、或是一個決定新增class的判斷式。
const p = document.querySelector("p");
//在window.innerWidth大於1000時,背景會變成gold
p.classList.toggle("backgroundColor2",window.innerWidth > 1000);
或者使用事件,可以透過點擊p
去切換顏色:
const p = document.querySelector("p");
p.addEventListener('click',toggleBackground)
function toggleBackground(){
this.classList.toggle("backgroundColor2")
}